// 坐标说明：整个盒子等于一个矩阵，下标等同于矩阵下标，如第一行第一格为(0, 0)、第一行第二格为(0, 1)、第二行第一格为(1, 0)
// 单元格大小：20*20像素
var CELL_SIZE = 20;

// 游戏活动界面大小为18 * 10 个格子
var GAME_BOX_SIZE = {row: 18, col: 10};

// 模型旋转方式见图: SRS-pieces.png，以下模型数组每个元素数组为一个形状，和图从左到右依次对应
// 长条模型
var I = [
    {
        position: [
            [0, 0, 0, 0], 
            [1, 1, 1, 1], 
            [0, 0, 0, 0], 
            [0, 0, 0, 0]
        ]
    },
    {
        position: [
            [0, 0, 1, 0], 
            [0, 0, 1, 0], 
            [0, 0, 1, 0], 
            [0, 0, 1, 0]
        ]
    },
    {
        position: [
            [0, 0, 0, 0], 
            [0, 0, 0, 0], 
            [1, 1, 1, 1], 
            [0, 0, 0, 0]
        ]
    },
    {
        position: [
            [0, 1, 0, 0], 
            [0, 1, 0, 0], 
            [0, 1, 0, 0], 
            [0, 1, 0, 0]
        ]
    }
];

// L的相反模型
var J = [
    {
        position: [
            [1, 0, 0], 
            [1, 1, 1], 
            [0, 0, 0]
        ]
    },
    {
        position: [
            [0, 1, 1], 
            [0, 1, 0], 
            [0, 1, 0]
        ]
    },
    {
        position: [
            [0, 0, 0], 
            [1, 1, 1], 
            [0, 0, 1]
        ]
    },
    {
        position: [
            [0, 1, 0], 
            [0, 1, 0], 
            [1, 1, 0]
        ]
    }
];

// L模型
var L = [
    {
        position: [
            [0, 0, 1], 
            [1, 1, 1], 
            [0, 0, 0]
        ]
    },
    {
        position: [
            [0, 1, 0], 
            [0, 1, 0], 
            [0, 1, 1]
        ]
    },
    {
        position: [
            [0, 0, 0], 
            [1, 1, 1], 
            [1, 0, 0]
        ]
    },
    {
        position: [
            [1, 1, 0], 
            [0, 1, 0], 
            [0, 1, 0]
        ]
    }
];

// 方块
var O = [
    {
        position: [
            [0, 1, 1], 
            [0, 1, 1]
        ]
    }
]

// S模型
var S = [
    {
        position: [
            [0, 1, 1], 
            [1, 1, 0], 
            [0, 0, 0]
        ]
    },
    {
        position: [
            [0, 1, 0], 
            [0, 1, 1], 
            [0, 0, 1]
        ]
    },
    {
        position: [
            [0, 0, 0], 
            [0, 1, 1], 
            [1, 1, 0]
        ]
    },
    {
        position: [
            [1, 0, 0], 
            [1, 1, 0], 
            [0, 1, 0]
        ]
    }
];

// Z模型
var Z = [
    {
        position: [
            [0, 1, 0], 
            [1, 1, 1], 
            [0, 0, 0]
        ]
    },
    {
        position: [
            [0, 1, 0], 
            [0, 1, 1], 
            [0, 1, 0]
        ]
    },
    {
        position: [
            [0, 0, 0], 
            [1, 1, 1], 
            [0, 1, 0]
        ]
    },
    {
        position: [
            [0, 1, 0], 
            [1, 1, 0], 
            [0, 1, 0]
        ]
    }
];

// T模型
var T = [
    {
        position: [
            [1, 1, 0], 
            [0, 1, 1], 
            [0, 0, 0]
        ]
    },
    {
        position: [
            [0, 0, 1], 
            [0, 1, 1], 
            [0, 1, 0]
        ]
    },
    {
        position: [
            [0, 0, 0], 
            [1, 1, 0], 
            [0, 1, 1]
        ]
    },
    {
        position: [
            [0, 1, 0], 
            [1, 1, 0], 
            [1, 0, 0]
        ]
    }
];

// 存放全部模型信息
var allModel = [I, J, L, O, S, Z, T];

function preHandleModelInfo() {
    for (let modelIndex = 0; modelIndex < allModel.length; modelIndex++) {
        for (let shapeIndex = 0; shapeIndex < allModel[modelIndex].length; shapeIndex++) {
            let shape = allModel[modelIndex][shapeIndex];
            shape.indexs = [];
            for (let i = 0; i < shape.position.length; i++) {
                for (let j = 0; j < shape.position[i].length; j++) {
                    if (shape.position[i][j] == 1) {
                        shape.indexs.push({x: i, y: j});
                    }
                }            
            }
        }
    }
}

// 预处理各类模型下标信息
preHandleModelInfo();